﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.Http;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;
using SampleApp.MvcBackend.Boot;

namespace SampleApp.MvcBackend
{
	// Note: For instructions on enabling IIS6 or IIS7 classic mode, 
	// visit http://go.microsoft.com/?LinkId=9394801

	public class MvcApplication : System.Web.HttpApplication
	{
		protected void Application_Start()
		{
			AreaRegistration.RegisterAllAreas();

			WebApiConfig.Register( GlobalConfiguration.Configuration );
			FilterConfig.RegisterGlobalFilters( GlobalFilters.Filters );
			RouteConfig.RegisterRoutes( RouteTable.Routes );
			BundleConfig.RegisterBundles( BundleTable.Bundles );
			AuthConfig.RegisterAuth();

			var directory = Path.Combine( AppDomain.CurrentDomain.BaseDirectory, "bin" );

			var bootstrapper = new Bootstrapper( directory );
			var container = bootstrapper.Boot();

			JasonConfig.Initialize( directory, "SampleApp.*", container );

			GlobalConfiguration.Configuration.DependencyResolver = container.Resolve<System.Web.Http.Dependencies.IDependencyResolver>();

			DependencyResolver.SetResolver( t =>
			{
				if ( container.Kernel.HasComponent( t ) )
				{
					return container.Resolve( t );
				}

				return null;
			},
			t =>
			{
				if ( container.Kernel.HasComponent( t ) )
				{
					return container.ResolveAll( t ).OfType<Object>();
				}

				return new List<Object>();
			} );
		}
	}
}